Odeslani udalosti
Otázka od: Radek Szurman
15. 4. 2004 8:41
Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu ktery pod
Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde je pod nim Label1
aby se provedla jeho udalost onMouseDown...
Radek Szurman
Odpovedá: Bronislav Klucka
15. 4. 2004 9:15
procedure TForm1.Image1MouseDown;
begin
Label1MouseDown(Label1);
end;
to by mohlo pomoci
Brona
> Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu ktery
> pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde je pod
> nim Label1 aby se provedla jeho udalost onMouseDown...
>
> Radek Szurman
Odpovedá: Radek Szurman
15. 4. 2004 9:13
Jo, napad je to dobry, ale neni to uplne ono protoze problem je ze ten
label1 je tvoren dynamicky a bylo by to hodne komplikovanejsi (neznam jeho
nazev, misto...), potreboval bych neco jako transparentni udalosti, nebo
neco na co muzu kreslit a neslo to prekryt jinym objektem ale udalosti by
zustaly jako kdyby tam nic nebylo.
Radek Szurman
> procedure TForm1.Image1MouseDown;
> begin
> Label1MouseDown(Label1);
> end;
>
>
> to by mohlo pomoci
>
> Brona
>
> > Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu ktery
> > pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde je pod
> > nim Label1 aby se provedla jeho udalost onMouseDown...
> >
> > Radek Szurman
Odpovedá: Bronislav Klucka
15. 4. 2004 9:57
1/
type
TForm1
procedure FormCreate(Sender:TObject);
protected
Label:TLabel;
procedure MyOnLabelClick(Sender:TObject);
end;
implementation
procedure FormCreate(Sender:TObject);
begin
Label:=TLabel.Create(Self);
InsertControl(label);
Label.OnClick:=MyOnLabelClick;
end;
P.S. s tim "neco, co by tam bylo, jako by to tam nebylo" bud kontretnejsi.
POpis svuj problem, abych Ti mohl lepe poradit
Brona
> Jo, napad je to dobry, ale neni to uplne ono protoze problem je ze ten
> label1 je tvoren dynamicky a bylo by to hodne komplikovanejsi (neznam
> jeho nazev, misto...), potreboval bych neco jako transparentni
> udalosti, nebo neco na co muzu kreslit a neslo to prekryt jinym
> objektem ale udalosti by zustaly jako kdyby tam nic nebylo.
>
> Radek Szurman
>
>
>> procedure TForm1.Image1MouseDown;
>> begin
>> Label1MouseDown(Label1);
>> end;
>>
>>
>> to by mohlo pomoci
>>
>> Brona
>>
>> > Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu
>> > ktery pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde
>> > je pod nim Label1 aby se provedla jeho udalost onMouseDown...
>> >
>> > Radek Szurman
Odpovedá: Radek Szurman
15. 4. 2004 10:14
Tedy aby to bylo jasnejsi, mam graficky program kde se vytvareji komponenty
na formulari dynamicky (jsou tam vrstvy..neco jako photoshop), je jich tam
vice a kdyz na objekt kliknu oznaci se, presouvam ho, upravuju... ale
potreboval bych jeste nakreslit 2x kruh nad nimi (presah pri tisku),
umistim-li nad ne image tak pak snimi nic neudelam. Tvoje reseni je supr ale
pouze pro jeden objekt pod image jestli ho dobre chapu. Myslel jsem ze bo to
mohlo udelat nejake odchyceni udalosti na image1 a odeslat pod nej, nevim
ale jestli to je vibec technicky mozne...
Radek Szurman
> 1/
> type
> TForm1
> procedure FormCreate(Sender:TObject);
> protected
> Label:TLabel;
> procedure MyOnLabelClick(Sender:TObject);
> end;
>
> implementation
>
> procedure FormCreate(Sender:TObject);
> begin
> Label:=TLabel.Create(Self);
> InsertControl(label);
> Label.OnClick:=MyOnLabelClick;
> end;
>
> P.S. s tim "neco, co by tam bylo, jako by to tam nebylo" bud kontretnejsi.
> POpis svuj problem, abych Ti mohl lepe poradit
> Brona
>
>
> > Jo, napad je to dobry, ale neni to uplne ono protoze problem je ze ten
> > label1 je tvoren dynamicky a bylo by to hodne komplikovanejsi (neznam
> > jeho nazev, misto...), potreboval bych neco jako transparentni
> > udalosti, nebo neco na co muzu kreslit a neslo to prekryt jinym
> > objektem ale udalosti by zustaly jako kdyby tam nic nebylo.
> >
> > Radek Szurman
> >
> >
> >> procedure TForm1.Image1MouseDown;
> >> begin
> >> Label1MouseDown(Label1);
> >> end;
> >>
> >>
> >> to by mohlo pomoci
> >>
> >> Brona
> >>
> >> > Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu
> >> > ktery pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1 kde
> >> > je pod nim Label1 aby se provedla jeho udalost onMouseDown...
> >> >
> >> > Radek Szurman
>
>
>
>
>
>
Odpovedá: Bronislav Klucka
15. 4. 2004 13:55
No, myslim, ze pozice jednotlivych prvku na formulari znas, kam si klik
mysi na formular take zjistis, co ti potom brani zjistit, ktera komponenta
lezi na miste kliknuti? velmi zjednodusene asi takto:
bytvoris obecnou methodu pro event kliku (napr.)
procedure OnComponentClick(Sender:TObject);
tuto methodu priradis kaznemu prvku, ktery vytvoris, (viz. nize), i tomu
image. na OnClick zjistis, zda si to sama komponenta (Label) osetri, nebo
to je image a zjistis, kam si klikl a lezi pod nim zjistis, zjistis, co
tam lezi za komponentu (napr. button3) a zavolas:
ProvedComponentClick(Button3);
Tzn:podrobneji (nemam ted u sebe delphi, takze spousta method se bude
jenovat jinak, ale snad Ti bude jasne, co tim chci rici).
type
TForm1
procedure VytvorLabelButtonClick(Sender:TObject);
procedure VytvorImageButtonClick(Sender:TObject);
protected
Label:TLabel;
procedure MyOnLabelClick(Sender:TObject);
function
CoLeziPodemnou(Komponenta:TComponent;MysX,MysY:integer):TComponent; end;
implementation
procedure TForm1.VytvorLabelButtonClick(Sender:TObject);
var Label:TLabel;
begin
Label:=TLabel.Create(Self);
InsertControl(label);
Label.OnClick:=MyOnLabelClick;
end;
procedure TForm1.VytvorImageButtonClick(Sender:TObject);
var image:TImage;
begin
image:=TImage.Create(Self);
InsertControl(image);
image.OnClick:=MyOnLabelClick;
end;
procedure TForm1.MyOnLabelClick(Sender:TObject);
var komponenta:TComponent;
begin
if (Sender is TImage) then
komponenta:=CoLeziPodemnou(TComponent(Sender),Mouse.X,Mouse.Y) else
komponenta:=TComponent(Sender);
MyOnLabelClick(komponenta);
end;
function
TForm1.CoLeziPodemnou(Komponenta:TComponent;MysX,MysY:integer):TComponent;
begin
{pomoci fce MouseToScreen, nebo ClientToStreen, nebo tak nejak prevadis
pozice krysy na nejake lepe pouzitelne hodnoty} end;
procedure TForm1.MyOnLabelClick(Sender:TObject);
var komponenta:TComponent;
begin
komponenta:=TComponent(Sender);
Komponenta.color:=clWhite;
....
end;
Trosku si s tim samozrejme jeste pohraj : . Snad jsem alespon trosku
pomohl. A hodilo by se pred pretypovanim se pro jistotu ujistit, zda jsou
skutecne parametry daneho typu.
Brona
> Tedy aby to bylo jasnejsi, mam graficky program kde se vytvareji
> komponenty na formulari dynamicky (jsou tam vrstvy..neco jako
> photoshop), je jich tam vice a kdyz na objekt kliknu oznaci se,
> presouvam ho, upravuju... ale potreboval bych jeste nakreslit 2x kruh
> nad nimi (presah pri tisku), umistim-li nad ne image tak pak snimi nic
> neudelam. Tvoje reseni je supr ale pouze pro jeden objekt pod image
> jestli ho dobre chapu. Myslel jsem ze bo to mohlo udelat nejake
> odchyceni udalosti na image1 a odeslat pod nej, nevim ale jestli to je
> vibec technicky mozne...
>
> Radek Szurman
>
>> 1/
>> type
>> TForm1
>> procedure FormCreate(Sender:TObject);
>> protected
>> Label:TLabel;
>> procedure MyOnLabelClick(Sender:TObject);
>> end;
>>
>> implementation
>>
>> procedure FormCreate(Sender:TObject);
>> begin
>> Label:=TLabel.Create(Self);
>> InsertControl(label);
>> Label.OnClick:=MyOnLabelClick;
>> end;
>>
>> P.S. s tim "neco, co by tam bylo, jako by to tam nebylo" bud
>> kontretnejsi. POpis svuj problem, abych Ti mohl lepe poradit
>> Brona
>>
>>
>> > Jo, napad je to dobry, ale neni to uplne ono protoze problem je ze
>> > ten label1 je tvoren dynamicky a bylo by to hodne komplikovanejsi
>> > (neznam jeho nazev, misto...), potreboval bych neco jako
>> > transparentni udalosti, nebo neco na co muzu kreslit a neslo to
>> > prekryt jinym objektem ale udalosti by zustaly jako kdyby tam nic
>> > nebylo.
>> >
>> > Radek Szurman
>> >
>> >
>> >> procedure TForm1.Image1MouseDown;
>> >> begin
>> >> Label1MouseDown(Label1);
>> >> end;
>> >>
>> >>
>> >> to by mohlo pomoci
>> >>
>> >> Brona
>> >>
>> >> > Cau, nevite nekdo jak predat udalosti kliku a pohybu mysi objektu
>> >> > ktery pod Image1 ? tj. kdyz kliknu na misto v pruhlednem image1
>> >> > kde je pod nim Label1 aby se provedla jeho udalost onMouseDown...
>> >> >
>> >> > Radek Szurman
Odpovedá: Bronislav Klucka
15. 4. 2004 14:19
Oprava kodu z meho 3. mailu
type
TForm1
procedure VytvorLabelButtonClick(Sender:TObject);
procedure VytvorImageButtonClick(Sender:TObject);
protected
procedure MyOnLabelClick(Sender:TObject);
function
CoLeziPodemnou(Komponenta:TComponent;MysX,MysY:integer):TComponent;
procedure ProvedComponentClick(komponenta:TComponent);
end;
implementation
procedure TForm1.VytvorLabelButtonClick(Sender:TObject);
var Label:TLabel;
begin
Label:=TLabel.Create(Self);
InsertControl(label);
Label.OnClick:=MyOnLabelClick;
end;
procedure TForm1.VytvorImageButtonClick(Sender:TObject);
var image:TImage;
begin
image:=TImage.Create(Self);
InsertControl(image);
image.OnClick:=MyOnLabelClick;
end;
procedure TForm1.MyOnLabelClick(Sender:TObject);
var komponenta:TComponent;
begin
if (Sender is TImage) then
komponenta:=CoLeziPodemnou(TComponent(Sender),Mouse.X,Mouse.Y) else
komponenta:=TComponent(Sender);
ProvedComponentClick(komponenta);
end;
function
TForm1.CoLeziPodemnou(Komponenta:TComponent;MysX,MysY:integer):TComponent;
begin {pomoci fce MouseToScreen, nebo ClientToStreen, nebo tak nejak
prevadis
pozice krysy na nejake lepe pouzitelne hodnoty} end;
procedure TForm1.ProvedComponentClick(komponenta:TComponent);
begin
Komponenta.color:=clWhite;
....
end;